package com.pcg.posgasstation.model.network;

import com.pcg.posgasstation.model.network.entity.AddOrderEntity;
import com.pcg.posgasstation.model.network.entity.BaseEntity;
import com.pcg.posgasstation.model.network.entity.GoodsItemEntity;
import com.pcg.posgasstation.model.network.entity.HistoryOrderItemEntity;
import com.pcg.posgasstation.model.network.entity.LoginEntity;
import com.pcg.posgasstation.model.network.entity.MemberInfoEntity;
import com.pcg.posgasstation.model.network.entity.OrderDetailEntity;
import com.pcg.posgasstation.model.network.entity.StaffInfoEntity;
import com.pcg.posgasstation.model.network.entity.UploadSignatureEntity;

import java.util.List;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.Query;

/**
 * Created by gupengcheng on 2018/12/30.
 */

public interface ApiService {

    /**
     * 登录
     *
     * @return
     */
    @POST("staffs_login")
    Observable<BaseEntity<LoginEntity>> login(@Query("device_number") String device_number,
                                              @Query("login_name") String login_name,
                                              @Query("password") String password);

    /**
     * 退出登陆
     *
     * @return
     */
    @DELETE("staffs_login_out")
    Observable<BaseEntity<String>> loginout(@Query("token") String token);

    /**
     * 员工信息
     *
     * @return
     */
    @GET("staffs_info")
    Observable<BaseEntity<StaffInfoEntity>> getStaffInfo(@Query("token") String token);

    /**
     * 获取商品列表
     *
     * @return
     */
    @GET("food_list")
    Observable<BaseEntity<List<GoodsItemEntity>>> getFoodList(@Query("token") String token);

    /**
     * 查询会员信息
     *
     * @param token
     * @param memberCard
     * @return
     */
    @GET("get_members_info")
    Observable<BaseEntity<MemberInfoEntity>> getMemberInfo(@Query("token") String token,
                                                           @Query("members_card") String memberCard);

    /**
     * 订单详情
     *
     * @param token
     * @param order_sn
     * @return
     */
    @GET("order_detail")
    Observable<BaseEntity<OrderDetailEntity>> getOrderDetail(@Query("token") String token,
                                                             @Query("order_sn") String order_sn);

    /**
     * 订单列表
     *
     * @param token
     * @param page
     * @param keyword
     * @param sign_path
     * @return
     */
    @GET("order_list")
    Observable<BaseEntity<List<HistoryOrderItemEntity>>> getOrderList(@Query("token") String token,
                                                                      @Query("page") String page,
                                                                      @Query("keyword") String keyword,
                                                                      @Query("sign_path") String sign_path);

    /**
     * 添加会员卡
     *
     * @param token
     * @param phone
     * @param name
     * @param members_card
     * @param code         验证码
     * @param password
     * @param car_card
     * @param sex          性别 0 1
     * @param id_card      选填（身份证）
     * @param birthday     选填（生日 2010-04-03）
     * @return
     */
    @POST("members_card_add")
    Observable<BaseEntity<String>> addMember(@Query("token") String token, @Query("tel") String phone,
                                             @Query("license_corporation") String name,
                                             @Query("members_card") String members_card,
                                             @Query("code") String code,
                                             @Query("pw") String password,
                                             @Query("car_card") String car_card,
                                             @Query("sex") String sex,
                                             @Query("id_card") String id_card,
                                             @Query("birthday") String birthday);

    /**
     * 下单
     *
     * @param token
     * @param phone
     * @param food_id
     * @param realTotalMoney
     * @param members_card
     * @return
     */
    @POST("add_order")
    Observable<BaseEntity<AddOrderEntity>> addOrder(@Query("token") String token, @Query("tel") String phone,
                                                    @Query("food_id") String food_id,
                                                    @Query("food_total") String realTotalMoney,
                                                    @Query("members_card") String members_card);

    /**
     * 会员支付密码验证
     *
     * @param token
     * @param order_sn
     * @param members_card
     * @param password
     * @return
     */
    @PUT("members_card_pass_verify")
    Observable<BaseEntity<String>> verifyPassword(@Query("token") String token,
                                                  @Query("order_sn") String order_sn,
                                                  @Query("members_card") String members_card,
                                                  @Query("pw") String password);

    /**
     * 图片文件上传
     *
     * @param token
     * @param file
     * @return
     */
    @Multipart
    @POST("upload/attach")
    Observable<BaseEntity<UploadSignatureEntity>> uploadSingnature(@Query("token") String token, @Part MultipartBody.Part file);

    /**
     * 更新签名
     *
     * @param token
     * @param order_sn
     * @param members_card
     * @param sign_path
     * @return
     */
    @PUT("sign_path_update")
    Observable<BaseEntity<String>> updateSingnature(@Query("token") String token,
                                                    @Query("order_sn") String order_sn,
                                                    @Query("members_card") String members_card,
                                                    @Query("sign_path") String sign_path);

    /**
     * 获取验证码
     *
     * @param token
     * @param tel
     * @return
     */
    @GET("send_code")
    Observable<BaseEntity<String>> getPhoneCaptchaCode(@Query("token") String token,
                                                       @Query("tel") String tel);

}
